import { ILinkListNode } from '../constdata/ILinkListNode';
/**
 *
 * 使用链表实现队列
 */
export class ILinkListNodeQueue {
  private head: ILinkListNode | null;
  private tail: ILinkListNode | null;
  private len = 0;
  // 入队要在队尾入队
  add(val: number) {
    // 创建一个链表结点
    const newNode: ILinkListNode = {
      val: val
    };
    //
    if (this.head == null) {
      this.head = newNode;
    }
    // 如果队尾不为null,则将队尾指针指向新的节点
    if (this.tail != null) this.tail.next = newNode;
    // 将队尾指向新结点
    this.tail = newNode;
    // 长度增加
    this.len++;
  }
  // 删除链表从队头开始
  delete() {
    // 获取head节点
    const headNode = this.head;
    // 获取头结点的值
    if (headNode == null) return null;
    const val = headNode.val;
    // 获取下一个结点,并将头部指针指向下一个结点
    if (headNode.next) this.head = headNode.next;
    this.len--;
    return val;
  }
  length() {
    return this.len;
  }
}
